package com.briup.smartcity_group7.web.controller;

import com.briup.smartcity_group7.bean.basic.Carousel;
import com.briup.smartcity_group7.service.ICarouselService;
import com.briup.smartcity_group7.util.Result;
import com.briup.smartcity_group7.util.ResultUtil;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: lenovo
 * @Date: 2022/12/31/16:05
 * 轮播图管理模块
 * web层：一定根据前端分离设计接口进行方法映射
 */
@Slf4j
@RequestMapping("/auth/carousel")
@Api(tags = "轮播图模块")
@RestController
public class CarouselController {
    @Autowired
    private ICarouselService service;

    @ApiOperation("查询所有开启状态轮播图")
    @GetMapping("/yes")
    public Result findByYes(){
        log.info("web:"+Thread.currentThread().getName());
        List<Carousel> list = service.findYesCarousel();
        return ResultUtil.success(list);
    }

    @ApiOperation("新增轮播图")
    @PostMapping
    //直接添加三个参数carouselInfo,carouselName,carouselUrl；或者单独封装成类CarouselVO
    public Result addCarousel(String carouselName,String carouselInfo,String carouselUrl){
        //1、接收参数信息，封装成轮播图对象（springMVC，，手动创建对象）
        //2、调用set()方法，设置轮播图三个信息。（此外还可通过构造器赋值new Carousel(name,info,url)）
        //（还可通过建造者模式构建对象--bean类中添加相关注解--》可以不需new轮播图对象；方法可以连续调用，即链式调用）
        Carousel carousel = Carousel.builder().carouselName(carouselName).carouselInfo(carouselInfo)
                        .carouselUrl(carouselUrl).build();
        //3、service对象调用save()方法保存新增轮播图对象
        service.saveCarousel(carousel);
        return ResultUtil.success("轮播图保存成功");
    }

    @ApiOperation("更新轮播图")
    @PutMapping()
    public Result update(Carousel carousel){
        //不再需要封装视图对象，service对象直接调用方法
        service.updateCarousel(carousel);
        return ResultUtil.success("轮播图信息更新成功");
    }

    //补充√：删除轮播图操作
    @ApiOperation("删除轮播图")
    @DeleteMapping()
    public Result delete(Integer id){
        service.deleteById(id);
        return ResultUtil.success("删除成功");
    }

    @ApiOperation("分页查询所有轮播图")
    @GetMapping("/page")
    //@RequestParam表示这两个参数时必填，而且默认的话会提供值
    public Result findByPage(@RequestParam(defaultValue ="1") Integer pageNum,
                             @RequestParam(defaultValue = "3") Integer pageSize){
        PageInfo<Carousel> pageInfo = service.findAll(pageNum, pageSize);
        return ResultUtil.success(pageInfo);
    }
}
